window.onload = function () {
    //数组的扩展
    // Array.of()
    // 定义：用于将一组值，转换为数组
    Array.of(1); //[1]
    Array.of(1,2,3); //[1,2,3]
    Array.of('a','b','c'); //['a', 'b', 'c']
    Array.of(['a','b','c']); //[['a', 'b', 'c']]
    Array.of(1,2,3).length  //3
    Array.of({id:1},{name:'jack'}) //[{id:1},{name:'jack'}]

    //定义数组
    var arr1 = new Array(3); //创建具有指定长度新数组
    console.log(arr1)  //[undefined,undefined,undefined]

    var arr2 = new Array('3'); //
    console.log(arr2)  //['3']

    var arr3 = new Array('hello'); //
    console.log(arr3)  //['hello']

    //
    var arr4 = new Array([3]); //
    console.log(arr4) //[[1]]

    var arr5 = new Array(['hello']); //
    console.log(arr5)  //[['hello']]

    //使用
    //计算数字2，4，6，8的和
    var items = Array.of(2,4,6,8);
    items.reduce((total,cur)=>total+cur,0);
    //reduce()累加  [1,2,3,4,5]
    //reduce(function(total,cur){return total+cur},10)

    // copyWithin()
    // 定义：将指定位置的成员复制到其他位置（会覆盖原有成员），然后返回当前数组（会修改当前数组）
    // 接受三个参数copyWithin(target, start , end)
    // target（必需）：从该位置开始替换数据。如果为负值，表示倒数。
    // start（可选）：从该位置开始读取数据，默认为 0。如果为负值，表示从末尾开始计算。
    // end（可选）：到该位置前停止读取数据，默认等于数组长度。如果为负值，表示从末尾开始计算。
    var lists = [1,2,3,4,5];
    //lists.copyWithin(0,3)//[4,5,3,4,5,]
    //0代表从0开始替换，3代表从3号位置到结束，覆盖原来1 2
    //lists.copyWithin(1,3) //[1,4,5,4,5]
    lists.copyWithin(0,3,4) //[4,2,3,4,5]
    lists.copyWithin(0,3,3) //[1,2,3,4,5]
    [1,2,3,4,5,6,7].copyWithin(1,2) //[1,3,4,5,6,7,7]
    [1,2,3,4,5,6,7].copyWithin(1,2,5) //[1,3,4,5,5,6,7]


    // fill()
    // 定义：用于将一个固定值替换数组的元素。
    // value（必需）：填充的值。
    // start（可选）：开始填充位置。
    // end（可选）：停止填充位置 (默认为 array.length)。
    var color = ["blue", "Orange", "red", "green"];
    var str = 'hello';
    color.fill(str,1,4)//["blue", "hello", "hello", "hello"];
    color.fill(str,3,4) //["blue", "Orange", "red", "hello"];

    // find()
    // find()用于找出第一个符合条件的数组成员。它的参数是一个回调函数,，所有数组成员依次执行该回调
    // 函数，直到找出第一个返回值为true的成员，然后返回该成员。如果没有符合条件的成员，则返回
    // undefined。
    // find方法的回调函数可以接受三个参数，依次为当前的值、当前的位置和原数组
    var i = [1,5,10,15].find(function(item,index,arr){
        return item>8
    });
    console.log(i) //10

    var number = [1,3,5,7,8];
    var n = number.find(v=>v>6);
    console.log(n) //7

    var n2 = number.findIndex(v=>v>6);
    console.log(n2)  //3

    var color = ["blue", "Orange", "red", "green"];
    var str = 'hello';
    var i = color.findIndex(v=>v=='red');
    color.fill(str,i,3);

    // includes()
    // 定义：方法返回一个布尔值，表示某个数组是否包含给定的值，与字符串的 includes 方法类似

    //flat()
    //定义：用于将嵌套的数组“拉平”，变成一维的数组。
    const items1 = [1,2,[3,4],[5,6]];
    console.log(items1.flat()) //[1, 2, 3, 4, 5, 6]

    const items2 = [1,2,[3,4,[5,6]],[7,8]];
    console.log(items2.flat(2))  //2拉平级数

    const items3 = [1,2,[3,4,[[5,6,[7,8,[9,10]]],11]],[12,13]];
    console.log(items3.flat(Infinity))  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]

    //flatMap()
    const lists1 = [1,2,3];
    const lists2 = lists1.flatMap(v=>[v,v*2]); //[[1,2],[2,4],[3,6]]
    console.log(lists2)  //[1, 2, 2, 4, 3, 6]





}